import 'dart:ui';

import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter_html/style.dart';
import 'package:image_picker/image_picker.dart';
import 'package:magic_car/UI/Loading.dart';
import 'package:magic_car/common/PrimayButton.dart';
import 'package:magic_car/common/nodata.dart';
import 'package:magic_car/common/playvideo.dart';
import 'package:magic_car/common/showbottomsheet.dart';
import 'package:magic_car/user/anserdetail.dart';
import 'package:magic_car/user/checkstudyinfo.dart';
import 'package:magic_car/user/taskdetail.dart';
import 'package:magic_car/user/taskincome.dart';
import 'package:magic_car/user/testvideo.dart';
import 'package:magic_car/user/upvideos.dart';
import 'package:magic_car/util/HttpHelper.dart';
import 'package:modal_progress_hud/modal_progress_hud.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:toast/toast.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:flutter_full_pdf_viewer/full_pdf_viewer_scaffold.dart';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:path_provider/path_provider.dart';
import 'package:video_player/video_player.dart';
// import 'package:flutter_file_preview/flutter_file_preview.dart';

class MyTaskPage extends StatefulWidget {
  MyTaskPage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyTaskPage> {
  VideoPlayerController _playcontroller;
  List formList;
  ScrollController _controller = new ScrollController();
  String _retrieveDataError;
  int page = 1;
  bool end = false;
  String keyword = "";
  var imgsLeng = 0;
  String current_pdf_url;
  File videos;
  bool _saving = false;
  bool hasvideo = false;
  final ImagePicker _picker = ImagePicker();
  initState() {
    super.initState();
    _controller.addListener(() {
      if (_controller.position.pixels == _controller.position.maxScrollExtent) {
        print('滑动到了最底部');
        loadData();
      }
    });

    formList = [];
    loadData();
  }

  Future<void> _playVideo(PickedFile file) async {
    if (file != null && mounted) {
      // await _disposeVideoController();
      if (kIsWeb) {
        // _controller = VideoPlayerController.network(file.path);
        // // In web, most browsers won't honor a programmatic call to .play
        // // if the video has a sound track (and is not muted).
        // // Mute the video so it auto-plays in web!
        // // This is not needed if the call to .play is the result of user
        // // interaction (clicking on a "play" button, for example).
        // await _controller.setVolume(0.0);
      } else {
        _playcontroller = VideoPlayerController.file(File(file.path));
        await _playcontroller.setVolume(1.0);
      }
      await _playcontroller.initialize();
      await _playcontroller.setLooping(true);
      await _playcontroller.play();
      setState(() {});
    }
  }

  Widget _previewVideo() {
    final Text retrieveError = _getRetrieveErrorWidget();
    if (retrieveError != null) {
      return retrieveError;
    }
    if (_controller == null) {
      return const Text(
        'You have not yet picked a video',
        textAlign: TextAlign.center,
      );
    }
    return Padding(
      padding: const EdgeInsets.all(10.0),
      child: AspectRatioVideo(_playcontroller),
    );
  }

  Text _getRetrieveErrorWidget() {
    if (_retrieveDataError != null) {
      final Text result = Text(_retrieveDataError);
      _retrieveDataError = null;
      return result;
    }
    return null;
  }

  //加载数据
  loadData() async {
    // if(keyword!=""){
    //   print(keyword);
    // if(end)return;
    // }
    // if (end) return;
    Map<String, String> map = new Map();
    SharedPreferences pref = await SharedPreferences.getInstance();
    map["id"] = pref.getString('uid');
    map["page"] = page.toString();
    map["keyword"] = keyword;
    print(map);

    HttpHelper.post(HttpHelper.API_MyTask, (data) async {
      if (data != null) {
        print(data);
        print(data["info"].length.toString());
        if (data["info"].length == 0) {
          Toast.show('暂无更多数据', context);
        } else {
          if (data["code"].toString() == "1") {
            if (data["info"].length < 10) {
              setState(() {
                end = true;
              });
            }
            if (page > 1) {
              List add = data["info"];
              formList.addAll(add);
              setState(() {
                formList = formList;
              });
            } else {
              setState(() {
                formList = data["info"];
                page = page + 1;
              });
            }
          }
        }
      }
    }, params: map);
  }

  Widget buildImgs(item) {
    List<Widget> tiles = [];

    Widget content;

    List items = item["image_url"];
    print(items.length.toString());

    for (var i = 0; i < items.length; i++) {
      //List temp1 = items[i] as List;
      tiles.add(Padding(
        padding: new EdgeInsets.fromLTRB(5, 0, 0, 10),
        child: GestureDetector(
            onTap: () {
              // print('点击查看图片');
              // Navigator.of(context).push(
              //   NinePicture(items, i),
              // );
            },
            child: Image.network(items[i], width: 100, height: 100)),
      ));
    }
    content = new Wrap(
        children: tiles //重点在这里，因为用编辑器写Column生成的children后面会跟一个<Widget>[]，
        //此时如果我们直接把生成的tiles放在<Widget>[]中是会报一个类型不匹配的错误，把<Widget>[]删了就可以了
        );
    return content;
  }

  Widget buildcontent() {
    List<Widget> tiles = [];
    Widget content;
    if (formList.length > 0) {
      for (var item in formList) {
        tiles.add(Padding(
            padding: new EdgeInsets.fromLTRB(15, 15, 15, 0),
            child: Container(
              width: double.infinity-30,
              decoration: new BoxDecoration(
                color: Colors.white,
              ),
              child: new GestureDetector(
                behavior: HitTestBehavior.opaque,
                onTap: () async {
                  Navigator.of(context)
                      .push(new MaterialPageRoute(builder: (_) {
                    return new UpvideosPage(item['taskid'].toString());
                  })).then((paramss) {
                    setState(() {
                      page = 1;
                    });
                    loadData();
                  });
                  // Navigator.of(context)
                  //     .push(new MaterialPageRoute(builder: (_) {
                  //   return new UpvideosPage(item['taskid'].toString());
                  // }
                  // )
                  // );
                  // if (item["video_status"].toString() == "2") {
                  //   //已经上传了视频
                  //   Navigator.of(context)
                  //       .push(new MaterialPageRoute(builder: (_) {
                  //     return new PlayVideoPage(item['video_url']);
                  //   }));
                  // } else {
                  //   if (item["video_status"].toString() == "1") {
                  //     //
                  //     Toast.show('视频正在上传', context);
                  //   } else {
                  //     //没有上传视频
                  //     showModalBottomSheet(
                  //         context: context,
                  //         builder: (BuildContext context) {
                  //           return Primaybottomsheet(
                  //             text: '选择视频来源',
                  //             confirmPressed: () async {
                  //               Navigator.pop(context);

                  //               uploadVideo(1, item['taskid']);
                  //             },
                  //             confirmtext: '录视频',
                  //             canceltext: '从相册选取',
                  //             cancelPressed: () {
                  //               Navigator.pop(context);

                  //               uploadVideo(2, item['taskid']);
                  //             },
                  //           );
                  //         });
                  //   }
                  // }
                },
                child: new Column(
                  mainAxisAlignment: MainAxisAlignment.start,
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    // Container(
                    //     width: 80,
                    //     child: new Column(children: <Widget>[
                    //       Padding(
                    //           padding: new EdgeInsets.fromLTRB(10, 10, 0, 10),
                    //           child: Image.network(item['taskimage'])
                    //           // Image.asset('resource/images/user/videos.png',
                    //           //     width: 70, height: 90),
                    //           // Text('视频已上传',style: TextStyle(fontSize: 11,)),
                    //           )
                    //     ])),
                    Container(
                        child: new Column(
                            mainAxisAlignment: MainAxisAlignment.start,
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: <Widget>[
                          Padding(
                              padding: new EdgeInsets.fromLTRB(10, 10, 20, 5),
                              child: Text(item["tasktitle"])),
                          Padding(
                              padding: new EdgeInsets.fromLTRB(10, 0, 20, 5),
                              child: Text(
                                '领取时间：' + item["picktime"],
                                style: TextStyle(
                                    fontSize: 13,
                                    color: Color.fromRGBO(153, 153, 153, 1)),
                              )),
                          Padding(
                              padding: new EdgeInsets.fromLTRB(10, 0, 20, 5),
                              child: Text(
                                '查看任务需求>>',
                                style: TextStyle(
                                    fontSize: 13,
                                    color: Color.fromRGBO(153, 153, 153, 1)),
                              )),
                          item["shenhe"] == ""
                              ? new Container(height: 0)
                              : Padding(padding: new EdgeInsets.fromLTRB(10, 0, 10, 5),child:Text(item['shenhe'],style: TextStyle(fontSize: 13,
                                              color: Color.fromRGBO(
                                                  223, 99, 83, 1),
                              ),))
                              // Padding(
                              //     padding:
                              //         new EdgeInsets.fromLTRB(10, 0, 10, 5),
                              //     child: Container(
                              //         child: Column(children: [
                              //       Expanded(
                              //           flex: 1,
                              //           child: Text(
                              //             item['shenhe'],
                              //             style: TextStyle(
                              //                 fontSize: 13,
                              //                 color: Color.fromRGBO(
                              //                     223, 99, 83, 1)),
                              //           ))
                              //     ]))),
                        ])),
                  ],
                ),
                // child: new Row(

                //     children: <Widget>[
                //       Column(
                //         mainAxisAlignment: MainAxisAlignment.start,
                //         crossAxisAlignment: CrossAxisAlignment.start,
                //         children: <Widget>[
                //           Padding(
                //             padding: new EdgeInsets.fromLTRB(20, 15, 20, 10),
                //             child: Column(
                //               children: <Widget>[Text(item["tasktitle"])],
                //             ),
                //           ),
                //           Padding(
                //             padding: new EdgeInsets.fromLTRB(20, 0, 20, 10),
                //             child: Row(
                //               children: <Widget>[
                //                 Expanded(
                //                     flex: 1,
                //                     child: Text(
                //                       '领取时间：' + item["picktime"],
                //                       style: TextStyle(
                //                           color: Color.fromRGBO(
                //                               153, 153, 153, 1),
                //                           fontSize: 13),
                //                     )),
                //               ],
                //             ),
                //           ),
                //         ],
                //       )
                //     ])
              ),
            )));
      }
    }
    content = new Column(
        children: tiles //重点在这里，因为用编辑器写Column生成的children后面会跟一个<Widget>[]，
        //此时如果我们直接把生成的tiles放在<Widget>[]中是会报一个类型不匹配的错误，把<Widget>[]删了就可以了
        );
    return content;
  }

  uploadVideo(type, id) async {
//  File result = await FilePicker.getFile(type: FileType.video);
//     if (result != null) {
//      // File file = File(result.files.single.path);
//     } else {
//       // User canceled the picker
//     }
    // File video = await ImagePicker.pickVideo(source: ImageSource.gallery);
    PickedFile videofile;
    File result;

    if (type == 1) {
      videofile = await _picker.getVideo(source: ImageSource.camera);
      result = File(videofile.path);
    } else {
      result = await FilePicker.getFile(type: FileType.video);

      // videofile = await _picker.getVideo(
      //     source: ImageSource.gallery);
      // videofile = await ImagePicker.pickVideo(source: ImageSource.gallery);
    }

    if (result == null) return;
    // if (type != 1) {
    //   if (await result.length() > 200 * 1024) {
    //     print(result.length().toString());
    //     Toast.show('上传视频不得大于200M', context);
    //     return;
    //   }
    // }

    //  File tempFile  = File.fromUri(result.uri);
    //  tempFile.rename(tempFile.path+'.mp4');
    // File tempfile1 = File

    //  File files = File(videofile.path);
    // File files = video;
    //  setState(() {
    //    hasvideo = true;
    //  });

    //await _playVideo(videofile);
    // 先获取上传tokn
    Map<String, String> map = new Map();
    SharedPreferences pref = await SharedPreferences.getInstance();
    map["id"] = pref.getString('uid');
    HttpHelper.post(HttpHelper.API_QiniuToken, (data) async {
      if (data != null) {
        if (data["code"].toString() == "1") {
          //获取成功
          updatetask("0", id);
          // PickedFile _files = videofile;
          Map<String, String> maps = new Map();
          SharedPreferences prefs = await SharedPreferences.getInstance();
          maps["id"] = prefs.getString('uid');
          maps["token"] = data['info']['token'];
          maps["key"] = data['info']['key'];

          maps["isgallery"] = type == 1 ? "0" : "1";

          // HttpHelper.upLoadvideo(result, (data) {
          //   print(data);
          //   if (data.containsKey('code')) {
          //     Toast.show(data['msg'], context);
          //   } else {
          //     updatetask(data['key'], id);
          //   }
          // }, params: maps);
        }
      }
    }, params: map);

    // File _files = await FlutterNativeImage.compressImage(image.path);
  }

//更新任务
  updatetask(key, id) async {
    Map<String, String> map = new Map();
    SharedPreferences pref = await SharedPreferences.getInstance();
    map["uid"] = pref.getString('uid');
    if (key != "0") {
      map["key"] = key;
    }
    map['id'] = id;
    HttpHelper.post(HttpHelper.API_UptTask, (data) async {
      if (data != null) {
        Toast.show(data['msg'], context);
        if (data["code"].toString() == "1") {
          page = 1;
          loadData(); //更新数据
        }
      }
    }, params: map);
  }

  Widget build(BuildContext context) {
    return
        // new MaterialApp(
        //     title: '结构件',
        //     home:
        new Scaffold(
            appBar: new AppBar(
              title: new Text(
                '我的任务',
                style: TextStyle(color: Colors.black),
              ),
              backgroundColor: Colors.white,
              elevation: 0,
              // backgroundColor: Color.fromRGBO(255, 204, 48, 1),
            ),
            // floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
            // floatingActionButton: FloatingActionButton(
            //   onPressed: () {
            //     Navigator.pushNamed(context, "upAsk");
            //   },
            //   child: Icon(
            //     Icons.add,
            //     color: Colors.white,
            //   ),
            //   backgroundColor: Color.fromRGBO(27, 182, 251, 1),
            // ),
            body: ModalProgressHUD(
                // color: Colors.blue,
                inAsyncCall: _saving,
                child: new Center(
                    child: hasvideo
                        ? _previewVideo()
                        : Container(
                            decoration: new BoxDecoration(
                              color: Color.fromRGBO(238, 238, 238, 1),
                            ),
                            child:
                                // new ListView(children: <Widget>[
                                Stack(
                              children: <Widget>[
                                Align(
                                  alignment: Alignment.topLeft,
                                  child: SizedBox(
                                      width: double.infinity,
                                      height: 60,
                                      child: Padding(
                                          padding: new EdgeInsets.fromLTRB(
                                              15, 10, 15, 10),
                                          // padding: new EdgeInsets.all(10),
                                          child: Container(
                                              child: Row(
                                                  mainAxisAlignment:
                                                      MainAxisAlignment.end,
                                                  children: <Widget>[
                                                Expanded(
                                                  child: new Container(
                                                    child: new TextField(
                                                      onSubmitted: (value) {
                                                        print(value);
                                                        //if(value=="")return;
                                                        setState(() {
                                                          keyword = value;
                                                          page = 1;
                                                          end = false;
                                                        });
                                                        print('搜索');
                                                        loadData();
                                                      },
                                                      // controller: _phonecontroller,
                                                      decoration:
                                                          new InputDecoration(
                                                              border:
                                                                  InputBorder
                                                                      .none,
                                                              hintText: '搜索',
                                                              prefixIcon: Icon(
                                                                  Icons
                                                                      .search)),
                                                    ),
                                                    decoration:
                                                        new BoxDecoration(
//背景
                                                      color: Colors.white,
                                                      //设置四周圆角 角度 这里的角度应该为 父Container height 的一半
                                                      borderRadius:
                                                          BorderRadius.all(
                                                              Radius.circular(
                                                                  25.0)),
                                                      //设置四周边框
                                                      border: new Border.all(
                                                          width: 1,
                                                          color: Colors.white),
                                                    ),
                                                  ),
                                                ),
                                                // FlatButton(
                                                //     onPressed: () {
                                                //       Navigator.pushNamed(context, "upAsk");
                                                //     },
                                                //     child: new Text(
                                                //       "我要提问",
                                                //       style: TextStyle(
                                                //           color: Color.fromRGBO(
                                                //               27, 182, 251, 1),
                                                //           fontSize: 13),
                                                //     ))
                                              ])))),
                                ),
                                Align(
                                    alignment: Alignment.bottomCenter,
                                    child: Padding(
                                        padding: new EdgeInsets.fromLTRB(
                                            0, 60, 0, 0),
                                        child: new RefreshIndicator(
                                          onRefresh: _onRefresh,
                                          child:
                                              formList.length == 0 && page == 1
                                                  ? Nodata()
                                                  : new ListView(
                                                      controller: _controller,
                                                      children: <Widget>[
                                                          buildcontent()
                                                        ]),
                                        ))),
                                // Align(
                                //     alignment: Alignment.bottomCenter,
                                //     child: Padding(
                                //         padding: new EdgeInsets.fromLTRB(
                                //             15, 60, 15, 10),
                                //         child: PrimayButton(
                                //           containercolor:
                                //               Color.fromRGBO(238, 238, 238, 1),
                                //           text: '任务收益',
                                //           width: double.infinity - 30,
                                //           height: 40,
                                //           textcolor: Colors.white,
                                //           bordercolor:
                                //               Color.fromRGBO(223, 99, 83, 1),
                                //           colors:
                                //               Color.fromRGBO(223, 99, 83, 1),
                                //           borderwidth: 1,
                                //           onPressed: () {
                                //             Navigator.of(context).push(
                                //                 new MaterialPageRoute(
                                //                     builder: (_) {
                                //               return new TaskAcountPage();
                                //             }));
                                //           },
                                //         )))
                              ],
                            )))
                //])))),
                ));
  }

  Future<Null> _onRefresh() async {
    await Future.delayed(Duration(seconds: 3), () {
      print('refresh');
      setState(() {
        page = 1;
      });
      loadData();
    });
  }
}

class AspectRatioVideo extends StatefulWidget {
  AspectRatioVideo(this.controller);

  final VideoPlayerController controller;

  @override
  AspectRatioVideoState createState() => AspectRatioVideoState();
}

class AspectRatioVideoState extends State<AspectRatioVideo> {
  VideoPlayerController get controller => widget.controller;
  bool initialized = false;

  void _onVideoControllerUpdate() {
    if (!mounted) {
      return;
    }
    // if (initialized != controller.value.initialized) {
    //   initialized = controller.value.initialized;
    //   setState(() {});
    // }
  }

  @override
  void initState() {
    super.initState();
    controller.addListener(_onVideoControllerUpdate);
  }

  @override
  void dispose() {
    controller.removeListener(_onVideoControllerUpdate);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    if (initialized) {
      return Center(
        child: AspectRatio(
          aspectRatio: controller.value?.aspectRatio,
          child: VideoPlayer(controller),
        ),
      );
    } else {
      return Container();
    }
  }
}
